import router, { constantRoutes, liveRoutes } from './router'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import getPageTitle from '@/utils/get-page-title'
import { Message } from 'element-ui'
import store from './store'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

/*
路由前置守卫： 并且手动关闭进度条
1.有token并且去的login页，拦截到首页
2.有token不是去登录页，放行
3.没有token，去的是login放行
4.没有token，去得不是login拦截到登录页，并提示用户先登录
*/
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  NProgress.start() // 开启进度条
  document.title = getPageTitle(to.meta.title) // 设置title拼接

  const token = store.getters.token

  // 代码优化，如果有token一定进入这个条件
  if (token) {
    to.path === '/login' ? next('/') : next()
    // 获取用户信息，当登陆了以后就是有token需要获取用户信息，但登陆完只需要获取一次，当退出登录在登陆时才需要获取用户信息
    // !store.getters.userId && store.dispatch('user/getUserInfoAction')
    if (!store.getters.userId) {
      await store.dispatch('user/getUserInfoAction')
      const menus = store.state.user.userInfo.roles.menus // 该员工的界面权限
      // console.log('  --->', menus) // 获取到的动态路由是他的path，要跟menus比对的不带/ 所以要去除斜杠
      console.log('  --->', store.state.user.userInfo)
      const newRoutes = liveRoutes.filter(item => {
        return menus.includes(item.path.slice(1))
      })
      // 拼接动态路由和静态路由
      store.commit('user/saveRoutes', [...constantRoutes, ...newRoutes])

      // 通配符404要放在所有的路由后面
      router.addRoutes([...newRoutes, { path: '*', redirect: '/404', hidden: true }])
    }

    NProgress.done()
    return
  }

  // 下面的一定是没有token的，所以可以省略！token
  if (whiteList.includes(to.path)) {
    next()
    NProgress.done()
    return
  } else {
    Message.info('请先登录')
    next('/login')
    NProgress.done()
    return
  }

  // if (token && to.path === '/login') {
  //   next('/')
  //   NProgress.done()
  //   return
  // }
  // if (token && to.path !== '/login') {
  //   next()
  //   NProgress.done()
  //   return
  // }

  // if (!token && whiteList.includes(to.path)) {
  //   next()
  //   NProgress.done()
  //   return
  // }
  // if (!token && !whiteList.includes(to.path)) {
  //   Message.info('请先登录')
  //   next('/login')
  //   NProgress.done()
  //   return
  // }
  // next()
})

router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
